'''
前面提到的方法的调用都是：实例化obj.方法名()。
因为大部分情况下类知识一个抽象概念，具体实例才有真正的行为动作
在有些场景中，可以不用实例化对象就能调用方法，例如：工具类的计算功能，这时可以定义静态方法和类方法来简化过程
classmethod类方法：第一个参数必须指向本身
staticmethod静态方法：可以没有任何参数

TIPs: 不建议通过对象来访问上述两种方法

谨慎：这两类方法是破坏类的封装性特性的
'''
class CalcTool:
  __PI = 3.14
  @staticmethod
  def add(x, y):
    __sum = x + y
    print(__sum)
  @classmethod
  def calcCircle(self, r):
    print(self.__PI*r*r)

CalcTool.add(2, 3)
CalcTool.calcCircle(2)